#pragma once

#include  "iostream"
#include  "vector"
#include  "stack"
#include  "unordered_map"
#include   "queue"

using namespace std;

/*
 *
 * 输入：matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出：[[1,0,1],[0,0,0],[1,0,1]]
 *
 *  todo 自己的垃圾方法完全错了
 * */
//
//void setIt(vector<vector<int>> &matrix,int row,int col)
//{
//    //
//
//    //设置行
//    int trow=row;
//    while (trow>=0)
//    {
//        matrix[trow--][col]=-1;
//    }
//    trow=row;
//    while (trow<matrix.size())
//    {
//        matrix[trow++][col]=-1;
//    }
//
//    //设置列
//    int tcol=col;
//
//    while (tcol>=0)
//    {
//        matrix[row][tcol--]=-1;
//    }
//    tcol=col;
//
//    while (tcol<matrix[0].size())
//    {
//        matrix[row][tcol++]=-1;
//    }
//
//}
//
//void setZeroes(vector<vector<int>>& matrix) {
//
//
//    for (int i = 0; i <matrix.size() ; ++i) {
//        for (int j = 0; j <matrix[0].size() ; ++j) {
//            if (matrix[i][j]==0)
//                setIt(matrix,i,j);
//        }
//    }
//
//    for (int i = 0; i <matrix.size() ; ++i) {
//        for (int j = 0; j <matrix[0].size() ; ++j) {
//            if (matrix[i][j]==-1)
//                matrix[i][j]=1;
//        }
//    }
//
//}


void setZeroes(vector<vector<int>> &matrix) {
    int m = matrix.size();
    int n = matrix[0].size();
    vector<int> row(m), col(n);

    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < n; ++j) {
            if (!matrix[i][j]) {
                row[i] = true;
                col[j] = true;
            }
        }
    }

    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < n; ++j) {
            if (row[i] || col[j]) {
                matrix[i][j] = 0;
            }
        }
    }


}




